/* itfreer v1.1
 * wdp web应用开发平台
 * 此类定义应用的基础代码
 */
;
/**
 * 初始化全局变量
 */
(function() {
	/**
	 * IE8兼容
	 */
	document.createElement('ng-include');
	document.createElement('ng-pluralize');
	document.createElement('ng-view');
	document.createElement('ng:include');
	document.createElement('ng:pluralize');
	document.createElement('ng:view');

	document.createElement('ag-Combotree');
	document.createElement('ag-Combobox');
	document.createElement('ag-Treegrid');
	document.createElement('ag-Datebox');
	document.createElement('ag-Textarea');
	document.createElement('ag-Upload');
	document.createElement('ag-Impexcel');
	document.createElement('ag-User');
	document.createElement('ag-Date');
	document.createElement('ag-Print-Button');
 
	/**
	 * 通用方法扩展，forEach方法
	 */
	if (!Array.prototype.forEach) {
		Array.prototype.forEach = function(callback, thisArg) {
			var T, k;
			if (this == null) {
				throw new TypeError(" this is null or not defined");
			}
			var O = Object(this);
			var len = O.length >>> 0;
			if ({}.toString.call(callback) != "[object Function]") {
				throw new TypeError(callback + " is not a function");
			}
			if (thisArg) {
				T = thisArg;
			}
			k = 0;
			while (k < len) {
				var kValue;
				if (k in O) {
					kValue = O[k];
					callback.call(T, kValue, k, O);
				}
				k++;
			}
		};
	}

	/**
	 * 通用方法扩展，删除数组中的索引项
	 */
	Array.prototype.remove = function(row){
		var dx = this.indexOf(row,0);
		if(isNaN(dx) || dx > this.length){
			return;
		}
		this.splice(dx,1);
	};

	/**
	 * 通用方法扩展，去掉字符的空间
	 */
	String.prototype.trim = function() {
	    return this.replace(/(^\s*)|(\s*$)/g,'');
	};

	/**
	 * 创建Color对象
	 */
	createColorFromHex = function(hexCode) {
	  	if(hexCode.length==4) {
	    	var shortHexCode = hexCode; 
	    	var hexCode = '#';
	    	for(var i=1;i<4;i++) { 
	        	hexCode += (shortHexCode.charAt(i) + 
				shortHexCode.charAt(i)); 
	    	}
	  	}
	   	if ( hexCode.indexOf('#') == 0 ) {
	       	hexCode = hexCode.substring(1);
	   	}
	   	var red   = hexCode.substring(0,2);
	   	var green = hexCode.substring(2,4);
	   	var blue  = hexCode.substring(4,6);
	   	var rgb = { r: parseInt(red,16), g : parseInt(green,16), b : parseInt(blue,16) };
	   	return rgb;
	};
}).call(this);

/**
 * 定义itfreer模块，做为核心模板，定义基础方法
 */
(function(window, angular, undefined){
	/**
	 * 定义核心模块
	 */
	var itfreerModule = angular.module('itfreer.core', ['ui.router']);

	/**
	 * 定义核心模块依赖注入器
	 */
	itfreerModule.factory('$itfreer_core', function($rootScope) {
		$itfreer_core = {
			/**
			 * 通用方法扩展，获取cookie方法
			 */
			getCookie : function(sName) { 
			    var aCookie = document.cookie.split(";");
			    var lastMatch = null;
			    for (var i = 0; i < aCookie.length; i++) {
			        var aCrumb = aCookie[i].split("=");
			        if (sName == aCrumb[0].trim()) {
			            lastMatch = aCrumb;
			        }
			    }
			    if (lastMatch) {
			        var v = lastMatch[1];
			        if (v === undefined) return v;
			        return unescape(v);
			    }
			    return null;
			},

			/**
			 * 对比两个对象是否相同
			 */
			objEquals : function(objA, obj){
				if(typeof(obj)=="undefined"||obj==null||typeof(obj)!="object") 
			        return false;
			    if(typeof(objA)=="undefined"||objA==null||typeof(objA)!="object") 
			        return false;
			    if(objA == obj) 
			        return true;
			    
			    if(typeof(obj)=="undefined"||obj==null||typeof(obj)!="object") 
			        return false;
			    var length = 0; var length1=0;
			    for(var ele1 in objA) {
			        length++;
			    }               
			    for(var ele2 in obj) {
			        length1++;
			    }               
			    if(length!=length1) 
			        return false;
			    if(obj.constructor==objA.constructor){
			        for(var ele in objA){
			            if(typeof(objA[ele])=="object") {
			                if(!objA[ele].equals(obj[ele]))
			                    return false;
			            }
			            else if(typeof(objA[ele])=="function"){
			                if(!objA[ele].toString().equals(obj[ele].toString())) 
			                    return false;
			            }
			            else if(objA[ele]!=obj[ele]) 
			                return false;
			        }
			        return true;
			    }
			    return false;
			},

			/**
			 * 获取对象
			 */
			getBinder : function(scope, attrs) {
				if(!attrs){
					return null;
				}
				try{
					var props = attrs.split('.');
					if (props.length == 1){
						return {obj : scope.$parent, field : props[0]};
					} else if (props.length == 2){
						return { obj : scope.$parent[props[0]], field : props[1]};
					} else if (props.length == 3){
						return { obj : scope.$parent[props[0]][props[1]], field : props[2]};
					} else if (props.length == 4){
						return { obj : scope.$parent[props[0]][props[1]][props[2]], field : props[3]};
					}
				}catch(e){
					return null;
				}
			},

			/**
			 * 获取是否为IE浏览器
			 */
			isIE : function() {  
			    if (!!window.ActiveXObject || "ActiveXObject" in window)  
			        return true;  
			    else  
			        return false;  
			},

			/**
			 * 获取日期对象
			 */
			getDateObject : function(input) {
				if (input == null) {
					return '';
				}
				try{
					var dType = typeof (input);
					var date = null;
					if (dType == 'date') {
						date = input;
					} else if (dType == 'object') {
						if (input.hasOwnProperty('time')) {
							date = new Date(input.time);
						} else {
							return input;
						}
					} else if (dType == 'string') {
						date = new Date(Date.parse(input));
					} else if(dType == "undefined"){
						return "";
					}

					if ($itfreer_core.isIE()){
					    var array = input.match(/\d+/g);  
				    	input = array[0]+'-'+array[1]+'-'+array[2];
				    	return input;
					}else{
						var y = date.getFullYear();
						var m = date.getMonth() + 1;
						var d = date.getDate();
						var result = "";
						result = y + '-' + m + '-' + d;
						return result;
					}
				}catch(e){
					return input;
				}
			},

			/**
			 * 日期格式化
			 */
			formatDate : function(date) {
				var month = date.getMonth() + 1;
				if ("" != date) {
					if (date.getMonth() + 1 < 10) {
						month = '0' + (date.getMonth() + 1);
					}
					var day = date.getDate();
					if (date.getDate() < 10) {
						day = '0' + date.getDate();
					}
					return date.getFullYear() + '-' + month + '-' + day;
				} else {
					return "";
				}
			},

			/**
			 * 获取url地址的参数
			 */
			getRequest : function() {
			  var url = location.search; //获取url中"?"符后的字串
			   var theRequest = new Object();
			   if (url.indexOf("?") != -1) {
			      var str = url.substr(1);
			      strs = str.split("&");
			      for(var i = 0; i < strs.length; i ++) {
			         theRequest[strs[i].split("=")[0]]=(strs[i].split("=")[1]);
			      }
			   }
			   return theRequest;
			},

			/**
			 * 获取对象是否为null或未定义
			 */
			isNullOrUndefined : function(thing) {
				if(!thing){
					return true;
				}

				if(thing == null){
					return true;
				}

				if(typeof(thing) == undefined){
					return true;
				}

				return false;
		    },

		    /**
			 * 获取对象是否有对象
			 */
			isHasProperty : function(obj, field) {
				if(!isNullOrUndefined(obj)){
					return obj.hasOwnProperty(field);
				}else{
					return false;
				}
		    },

		    /**
			 * 获取对象是否有对象，并且不为空
			 */
			isHasPropertyAndNoNull : function(obj, field) {
				if(!isNullOrUndefined(obj)){
					if(obj.hasOwnProperty(field)){
						var value = obj[field];
						return !isNullOrUndefined(value);
					}else{
						return false;
					}
				}else{
					return false;
				}
		    },

		    /**
			 * 左部填充
			 */
		    leftPad : function(s, mL, seq) {
				return (Array(mL + 1).join(seq) + s).split('').reverse().join('').substring(0, mL).split('').reverse().join('');
			},

			/**
			 * 获取GUID值
			 */
		    getGUID : function(){
				var a = function(a){
					return 0>a?NaN:30>=a?0|Math.random()*(1<<a):53>=a?(0|1073741824*Math.random())+1073741824*(0|Math.random()*(1<<a-30)):NaN
				};
				var b = function(a,b){
					for(var c=a.toString(16),d=b-c.length,e="0";0<d;d>>>=1,e+=e){
						d&1&&(c=e+c);
					}
					return c;
				};

				var myDate = new Date();
				//获取完整的年份(4位,1970-????)
				var year = myDate.getFullYear();
				//获取当前月份(0-11,0代表1月)
				var month = myDate.getMonth() + 1;
				//获取当前日(1-31)
				var day = myDate.getDate();
				//获取当前小时数(0-23)
				var hours = myDate.getHours();
				//获取当前分钟数(0-59)
				var minutes = myDate.getMinutes();
				//获取当前秒数(0-59)
				var seconds = myDate.getSeconds();

				var guidString = b(a(32),8)+b(a(16),4)+b(16384|a(12),4)+b(32768|a(14),4)+b(a(48),12);
				
				return (year.toString()
							+ this.leftPad(month.toString(),2,'0')
							+ this.leftPad(day.toString(),2,'0')
							+ this.leftPad(hours.toString(),2,'0')
							+ this.leftPad(minutes.toString(),2,'0')
							+ this.leftPad(seconds.toString(),2,'0')
							+ guidString);
			},

			/**
			 * 将对象转换为json字符串
			 */
			toJSONStr : function(obj) {
				if (typeof obj === 'string')
					return obj;
				if (typeof obj === 'object'){
					if(obj == null)
						return ;
					return JSON.stringify(obj);
				}
				throw new Error('参数必须为对象（数组）或对象（数组）的JSON字符串');
			},

			/**
			 * 验证是否为数字
			 */
			validateNum : function(num) {
				var reg = new RegExp("^[0-9]*$");
				if (!reg.test(num)) {
					return false;
				}
				return true;
			},

			/**
			 * 当前数是否为双数
			 */
			isDoubleNum : function(num){
				var i = num % 2;
				if(i==0){
					return true;
				}else{
					return false;
				}
			}
		};
		for(f in $itfreer_core){
			$rootScope[f] = $itfreer_core[f];
		}
		return $itfreer_core;
	});

	/**
	 * 处理显示长度
	 */
	itfreerModule.filter("asLength", function () {
	    return function (input, maxLength) {
	    	if(input==null || input==""){
	    		return "";
	    	}
	    	if(input.length<=maxLength){
	    		return input;
	    	}else{
	    		input = input.substring(0, maxLength-3) + "...";
	    		return input;
	    	}
	    };
	});

	/**
	 * 日期转换
	 */
	itfreerModule.filter("asDate", ['$itfreer_core', function ($itfreer_core) {
	    return function (input) {
	    	return $itfreer_core.getDateObject(input);
	    };
	}]);
	
	/**
	 * 日期转换
	 */
	itfreerModule.filter("sdeField", ['$itfreer_core', function ($itfreer_core) {
	    return function (input) {
	    	var infos = input.split(".");
	    	return infos[infos.length - 1];
	    };
	}]);
	
	/**
	 * 获取第一张图片路径
	 */
	itfreerModule.filter("firstImgUrl", ['$itfreer_core', function ($itfreer_core) {
	    return function (url) {
	    	if(!url) return "";
	    	if(url.indexOf("|") > 0)
			{
				 var arr = url.split("|");
				 return String(arr[arr.length-1].toString().split(":")[0]);
		    }
			 else{
				 var arr = url.split(":");
				return String(arr[0]);
			 }
	    };
	}]);
	
	/**
	 * 获取第一张图片名称
	 */
	itfreerModule.filter("firstImgName", ['$itfreer_core', function ($itfreer_core) {
	    return function (url) {
	    	if(!url) return "";
	    	if(url.indexOf("|") > 0)
			{
				 var arr = url.split("|");
				 return String(arr[arr.length-1].toString().split(":")[1]);
		    }else{
				 var arr = url.split(":");
				 return String(arr[1]);
			}
	    };
	}]);

	/* 
	 * 加载服务器
	 */
	itfreerModule.run(function($rootScope, $itfreer_core) {
	  	
	});
}(window, angular));